/*
 * UStringList.h
 *
 *  Created on: 2020年3月24日
 *      Author: chuanjiang.zh
 */

#ifndef USTRINGLIST_H_
#define USTRINGLIST_H_

#include "UString.h"

class UStringListPrivate;

class DLLEXPORT UStringList
{
public:
	UStringList();
	virtual ~UStringList();

	UStringList(const UStringList& strList);
	UStringList& operator = (const UStringList& strList);


	int size() const;

	bool empty() const;

	const UString& at(int idx) const;
	UString& at(int idx);

	UString& front();
	const UString& front() const;
	UString& back();
	const UString& back() const;

	UStringList& append(const UString& str);

	UStringList& push_back(const UString& str);
	UStringList& push_front(const UString& str);
	UStringList& insert(int idx, const UString& str);


	void removeAt(int idx);

	void removeFirst();
	void removeLast();



	bool contains(const UString& str) const;

	int indexOf(const UString& str) const;

	int lastIndexOf(const UString& str) const;

	void sort();

	UString join(char separator) const;
	UString join(const UString& separator) const;

	void clear();

protected:
	UStringListPrivate*	m_pimpl;


};


inline std::ostream&  operator << (std::ostream& os, const UStringList& strList)
{
    os << strList.join(',');
    return os;
}


#endif /* USTRINGLIST_H_ */
